package 基础篇.创建线程;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * Created by Administrator on 2018/7/27 0027.
 */
public class CallableDemo2 {

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ThreadCallable t=new ThreadCallable();
        //1.执行 Callable 方式，需要 FutureTask 实现类的支持，用于接收运算结果。
        FutureTask<Integer> task = new FutureTask<Integer>(t);
        new Thread(task,"").start();
        //task.get()返回任务中的返回值，调用该方法会导致程序阻塞，直到子线程结束后才会得到返回值
        //task.get(long,TimeUnit) 如果到达指定时间没有返回值则抛出TimeOutException
        System.out.println("子线程返回值:"+task.get());
        System.out.println("任务正常完成前被取消:"+task.isCancelled());
        System.out.println("任务已完成:"+task.isDone());
    }
}

class ThreadCallable implements Callable<Integer>{
    public Integer call() throws Exception {
        int i=0;
        for(;i<100;i++){
            System.out.println(Thread.currentThread().getName()+"value:"+i);
        }
        return i;
    }
}
